/**
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of https://github.com/facebook/react-native.
 */

const ALLOWED_SCALES: { [key: string]: number[] } = {
  ios: [1, 2, 3],
}

function filterPlatformAssetScales(
  platform: string,
  scales: ReadonlyArray<number>
): ReadonlyArray<number> {
  const whitelist: number[] = ALLOWED_SCALES[platform]
  if (!whitelist) {
    return scales
  }
  const result = scales.filter((scale) => whitelist.indexOf(scale) > -1)
  if (result.length === 0 && scales.length > 0) {
    // No matching scale found, but there are some available. Ideally we don't
    // want to be in this situation and should throw, but for now as a fallback
    // let's just use the closest larger image
    const maxScale = whitelist[whitelist.length - 1]
    for (const scale of scales) {
      if (scale > maxScale) {
        result.push(scale)
        break
      }
    }

    // There is no larger scales available, use the largest we have
    if (result.length === 0) {
      result.push(scales[scales.length - 1])
    }
  }
  return result
}

export default filterPlatformAssetScales
